package com.blackandwhitesensation.sice.dataaccess.dao;

import com.blackandwhitesensation.sice.modelo.Usuario;
import com.blackandwhitesensation.sice.modelo.UsuarioSistema;

import java.math.BigDecimal;

import java.util.Date;
import java.util.List;
import java.util.Set;


/**
 * Interface for UsuarioDAO.
 *
 * @author Zathura Code Generator http://code.google.com/p/zathura/
 */
public interface IUsuarioDAO {
    // property constants
    //public static final String  ALIAS = "alias";
    public static final String ALIAS = "alias";

    //public static final String  APELLIDO = "apellido";
    public static final String APELLIDO = "apellido";

    //public static final String  ARTISTASVERENVIVO = "artistasVerEnvivo";
    public static final String ARTISTASVERENVIVO = "artistasVerEnvivo";

    //public static final String  CELULAR = "celular";
    public static final String CELULAR = "celular";

    //public static final String  CIUDADRESIDENCIA = "ciudadResidencia";
    public static final String CIUDADRESIDENCIA = "ciudadResidencia";

    //public static final String  CONOCIMIENTOMEMBRESIA = "conocimientoMembresia";
    public static final String CONOCIMIENTOMEMBRESIA = "conocimientoMembresia";

    //public static final String  CORREOELECTRONICO = "correoElectronico";
    public static final String CORREOELECTRONICO = "correoElectronico";

    //public static final String  DEPORTEPREFERIDO = "deportePreferido";
    public static final String DEPORTEPREFERIDO = "deportePreferido";

    //public static final String  DIRECCIONRESIDENCIA = "direccionResidencia";
    public static final String DIRECCIONRESIDENCIA = "direccionResidencia";

    //public static final String  DIRECCIONTRABAJA = "direccionTrabaja";
    public static final String DIRECCIONTRABAJA = "direccionTrabaja";

    //public static final Long  EDAD = "edad";
    public static final String EDAD = "edad";

    //public static final String  EMPRESATRABAJA = "empresaTrabaja";
    public static final String EMPRESATRABAJA = "empresaTrabaja";

    //public static final String  ESTADOCIVIL = "estadoCivil";
    public static final String ESTADOCIVIL = "estadoCivil";

    //public static final Date  FECHANACIMIENTO = "fechaNacimiento";
    public static final String FECHANACIMIENTO = "fechaNacimiento";

    //public static final String  LUGARNACIMIENTO = "lugarNacimiento";
    public static final String LUGARNACIMIENTO = "lugarNacimiento";

    //public static final String  MUSICAPREFERIDA = "musicaPreferida";
    public static final String MUSICAPREFERIDA = "musicaPreferida";

    //public static final String  NIVELEDUCATIVO = "nivelEducativo";
    public static final String NIVELEDUCATIVO = "nivelEducativo";

    //public static final String  NOMBRE = "nombre";
    public static final String NOMBRE = "nombre";

    //public static final String  PAGINASWEBVISITADAS = "paginasWebVisitadas";
    public static final String PAGINASWEBVISITADAS = "paginasWebVisitadas";

    //public static final String  PIN = "pin";
    public static final String PIN = "pin";

    //public static final String  PROFESION = "profesion";
    public static final String PROFESION = "profesion";

    //public static final String  REVISTASLEE = "revistasLee";
    public static final String REVISTASLEE = "revistasLee";

    //public static final String  SEXO = "sexo";
    public static final String SEXO = "sexo";

    //public static final String  TELEFONOOFICINA = "telefonoOficina";
    public static final String TELEFONOOFICINA = "telefonoOficina";

    //public static final String  TELEFONORESIDENCIA = "telefonoResidencia";
    public static final String TELEFONORESIDENCIA = "telefonoResidencia";

    /**
    * Perform an initial save of a previously unsaved Usuario entity. All
    * subsequent persist actions of this entity should use the #update()
    * method. This operation must be performed within the a database
    * transaction context for the entity's data to be permanently saved to the
    * persistence store, i.e., database. This method uses the
    * {@link javax.persistence.EntityManager#persist(Object) EntityManager#persist}
    * operation.
    *
    * <pre>
    * EntityManagerHelper.beginTransaction();
    * IUsuarioDAO.save(entity);
    * EntityManagerHelper.commit();
    * </pre>
    *
    * @param entity
    *            Usuario entity to persist
    * @throws RuntimeException
    *             when the operation fails
    */
    public void save(Usuario entity);

    /**
    * Delete a persistent Usuario entity. This operation must be performed
    * within the a database transaction context for the entity's data to be
    * permanently deleted from the persistence store, i.e., database. This
    * method uses the
    * {@link javax.persistence.EntityManager#remove(Object) EntityManager#delete}
    * operation.
    *
    * <pre>
    * EntityManagerHelper.beginTransaction();
    * IUsuarioDAO.delete(entity);
    * EntityManagerHelper.commit();
    * entity = null;
    * </pre>
    *
    * @param entity
    *            Usuario entity to delete
    * @throws RuntimeException
    *             when the operation fails
    */
    public void delete(Usuario entity);

    /**
    * Persist a previously saved Usuario entity and return it or a copy of it
    * to the sender. A copy of the Usuario entity parameter is returned when
    * the JPA persistence mechanism has not previously been tracking the
    * updated entity. This operation must be performed within the a database
    * transaction context for the entity's data to be permanently saved to the
    * persistence store, i.e., database. This method uses the
    * {@link javax.persistence.EntityManager#merge(Object) EntityManager#merge}
    * operation.
    *
    * <pre>
    * EntityManagerHelper.beginTransaction();
    * entity = IUsuarioDAO.update(entity);
    * EntityManagerHelper.commit();
    * </pre>
    *
    * @param entity
    *            Usuario entity to update
    * @return Usuario the persisted Usuario entity instance, may not be the
    *         same
    * @throws RuntimeException
    *             if the operation fails
    */
    public Usuario update(Usuario entity);

    public Usuario findById(String id);

    /**
    * Find all Usuario entities with a specific property value.
    *
    * @param propertyName
    *            the name of the Usuario property to query
    * @param value
    *            the property value to match
    * @param rowStartIdxAndCount
    *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
    *            row index in the query result-set to begin collecting the
    *            results. rowStartIdxAndCount[1] specifies the the maximum
    *            count of results to return.
    * @return List<Usuario> found by query
        */
    public List<Usuario> findByProperty(String propertyName, Object value,
        int... rowStartIdxAndCount);

    public List<Usuario> findByCriteria(String whereCondition);

    public List<Usuario> findByAlias(Object alias);

    public List<Usuario> findByAlias(Object alias, int... rowStartIdxAndCount);

    public List<Usuario> findByApellido(Object apellido);

    public List<Usuario> findByApellido(Object apellido,
        int... rowStartIdxAndCount);

    public List<Usuario> findByArtistasVerEnvivo(Object artistasVerEnvivo);

    public List<Usuario> findByArtistasVerEnvivo(Object artistasVerEnvivo,
        int... rowStartIdxAndCount);

    public List<Usuario> findByCelular(Object celular);

    public List<Usuario> findByCelular(Object celular,
        int... rowStartIdxAndCount);

    public List<Usuario> findByCiudadResidencia(Object ciudadResidencia);

    public List<Usuario> findByCiudadResidencia(Object ciudadResidencia,
        int... rowStartIdxAndCount);

    public List<Usuario> findByConocimientoMembresia(
        Object conocimientoMembresia);

    public List<Usuario> findByConocimientoMembresia(
        Object conocimientoMembresia, int... rowStartIdxAndCount);

    public List<Usuario> findByCorreoElectronico(Object correoElectronico);

    public List<Usuario> findByCorreoElectronico(Object correoElectronico,
        int... rowStartIdxAndCount);

    public List<Usuario> findByDeportePreferido(Object deportePreferido);

    public List<Usuario> findByDeportePreferido(Object deportePreferido,
        int... rowStartIdxAndCount);

    public List<Usuario> findByDireccionResidencia(Object direccionResidencia);

    public List<Usuario> findByDireccionResidencia(Object direccionResidencia,
        int... rowStartIdxAndCount);

    public List<Usuario> findByDireccionTrabaja(Object direccionTrabaja);

    public List<Usuario> findByDireccionTrabaja(Object direccionTrabaja,
        int... rowStartIdxAndCount);

    public List<Usuario> findByEdad(Object edad);

    public List<Usuario> findByEdad(Object edad, int... rowStartIdxAndCount);

    public List<Usuario> findByEmpresaTrabaja(Object empresaTrabaja);

    public List<Usuario> findByEmpresaTrabaja(Object empresaTrabaja,
        int... rowStartIdxAndCount);

    public List<Usuario> findByEstadoCivil(Object estadoCivil);

    public List<Usuario> findByEstadoCivil(Object estadoCivil,
        int... rowStartIdxAndCount);

    public List<Usuario> findByFechaNacimiento(Object fechaNacimiento);

    public List<Usuario> findByFechaNacimiento(Object fechaNacimiento,
        int... rowStartIdxAndCount);

    public List<Usuario> findByLugarNacimiento(Object lugarNacimiento);

    public List<Usuario> findByLugarNacimiento(Object lugarNacimiento,
        int... rowStartIdxAndCount);

    public List<Usuario> findByMusicaPreferida(Object musicaPreferida);

    public List<Usuario> findByMusicaPreferida(Object musicaPreferida,
        int... rowStartIdxAndCount);

    public List<Usuario> findByNivelEducativo(Object nivelEducativo);

    public List<Usuario> findByNivelEducativo(Object nivelEducativo,
        int... rowStartIdxAndCount);

    public List<Usuario> findByNombre(Object nombre);

    public List<Usuario> findByNombre(Object nombre, int... rowStartIdxAndCount);

    public List<Usuario> findByPaginasWebVisitadas(Object paginasWebVisitadas);

    public List<Usuario> findByPaginasWebVisitadas(Object paginasWebVisitadas,
        int... rowStartIdxAndCount);

    public List<Usuario> findByPin(Object pin);

    public List<Usuario> findByPin(Object pin, int... rowStartIdxAndCount);

    public List<Usuario> findByProfesion(Object profesion);

    public List<Usuario> findByProfesion(Object profesion,
        int... rowStartIdxAndCount);

    public List<Usuario> findByRevistasLee(Object revistasLee);

    public List<Usuario> findByRevistasLee(Object revistasLee,
        int... rowStartIdxAndCount);

    public List<Usuario> findBySexo(Object sexo);

    public List<Usuario> findBySexo(Object sexo, int... rowStartIdxAndCount);

    public List<Usuario> findByTelefonoOficina(Object telefonoOficina);

    public List<Usuario> findByTelefonoOficina(Object telefonoOficina,
        int... rowStartIdxAndCount);

    public List<Usuario> findByTelefonoResidencia(Object telefonoResidencia);

    public List<Usuario> findByTelefonoResidencia(Object telefonoResidencia,
        int... rowStartIdxAndCount);

    /**
    * Find all Usuario entities.
    *
    * @param rowStartIdxAndCount
    *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
    *            row index in the query result-set to begin collecting the
    *            results. rowStartIdxAndCount[1] specifies the the maximum
    *            count of results to return.
    * @return List<Usuario> all Usuario entities
    */
    public List<Usuario> findAll(int... rowStartIdxAndCount);

    public List<Usuario> findPageUsuario(String sortColumnName,
        boolean sortAscending, int startRow, int maxResults);

    public Long findTotalNumberUsuario();
    
    public Long getSequence()throws Exception;
   
    
}
